package com.ordobill.webapp.exception;

import java.io.PrintStream;
import java.io.PrintWriter;

/**
 * 이 클래스는 모든 애플리케이션 예외의 공통 슈퍼 클래스이다.
 * 이 클래스와 이 클래스의 서브클래스는 chained 예외 기능을 제공한다.
 * chained 예외 기능은 원래의 문제를 이 클래스나 이 클래스의 서브 클래스로
 * 감싸서 다시 발생시킬 수 있다.
 */

@SuppressWarnings("serial")
public class BaseException extends Exception {

	protected Throwable rootCause = null;

	protected BaseException(Throwable rootCause) {
		this.rootCause = rootCause;
	}
	
	public void setRootCause(Throwable anException) {
		rootCause = anException;
	}
	
	public Throwable getRootCause() {
		return rootCause;
	}
	
	public void printStackTrace() {
		printStackTrace(System.err);
	}
	
	public void printStackTrace(PrintStream outStream) {
		printStackTrace(new PrintWriter(outStream));
	}
	
	public void printStackTrace(PrintWriter writer) {
		super.printStackTrace(writer);
		
		if ( getRootCause() != null )
			getRootCause().printStackTrace(writer);
		
		writer.flush();
	}
}